package com.dc.designPattern._1_singleton.extend.extend1;

import cn.hutool.core.util.RandomUtil;
import com.google.common.collect.Lists;

import java.util.List;

/**
 * Description: 单例模式扩展_通过一个类，只能创建 指定数量的 对象
 *
 *  正常情况，一个朝代的同一个时代，只有一个皇帝
 *  但是，存在两个皇帝共存的情况，需要如何处理？
 *
 * @author: gdc
 * @date: 2021/6/21
 * @version 1.0
 */
public class Emperor {

    /**
     * 定义最多能产生的实例数量
     */
    private static int MAXNUM_OF_EMPEROR = 2;
    /**
     * 定义皇帝实例列表
     */
    private static List<Emperor> emperorList = Lists.newArrayList();
    /**
     * 皇帝名称
     */
    private String name;

    private Emperor(String name){
        this.name = name;
    }

    public String getName() {
        return name;
    }

    /**
     * 初始化时，创建指定的对象数量
     */
    static {
        for (int i = 0; i < MAXNUM_OF_EMPEROR; i++) {
            emperorList.add(new Emperor("皇帝_" + (i + 1)));
        }
    }

    /**
     * 随机获取一个皇帝实例
     * @return          对象实例
     */
    public static Emperor getInstance() {
        int index = RandomUtil.randomInt(MAXNUM_OF_EMPEROR);
        return emperorList.get(index);
    }
}

